import memoizeOne from "memoize-one";

const collator = memoizeOne((language: string | undefined) => new Intl.Collator(language));

const caseInsensitiveCollator = memoizeOne(
    (language: string | undefined) => new Intl.Collator(language, { sensitivity: "accent" })
);

const fallbackStringCompare = (a: string, b: string) => {
    if (a < b) {
        return -1;
    }
    if (a > b) {
        return 1;
    }

    return 0;
};

export const stringCompare = (a: string, b: string, language: string | undefined = undefined) => {
    // @ts-ignore
    if (Intl?.Collator) {
        return collator(language).compare(a, b);
    }

    return fallbackStringCompare(a, b);
};

export const caseInsensitiveStringCompare = (
    a: string,
    b: string,
    language: string | undefined = undefined
) => {
    // @ts-ignore
    if (Intl?.Collator) {
        return caseInsensitiveCollator(language).compare(a, b);
    }

    return fallbackStringCompare(a.toLowerCase(), b.toLowerCase());
};
